package com.reflect.demo04;

public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
        System.out.println("main方法加载");
        // 1. new 一个类的对象 会执行类的初始化
         Son son = new Son();
        /**
         * main方法加载
         * Father类加载
         * Son类加载
         */
        // 2.使用 forName 获取反射
        // Class.forName("com.reflect.demo04.Son");

        // 3.调用静态成员或者方法，当父类没有被初始化时，则先会初始化它的父类
        //System.out.println(Son.m);

        // 不会发生类的初始化
        // 1.子类调用父类静态变量,父类会初始化，但子类不会
        // System.out.println(Son.name);

        // 2.访问常量
        //System.out.println(Son.M);

        // 3.通过数组定义类引用，不会触发此类的初始化
        // Son[] array = new Son[10];
    }
}

class Father {
    public static String name = "父类";

    static {
        System.out.println("Father类加载");
    }
    public static void go() {
        System.out.println("静态方法");
    }
}

class Son extends Father {
    public static int m = 10;
    public final static int M = 100;
    static {
        System.out.println("Son类加载");
    }
}
